package com.slt.android.animatest.custom;

import android.graphics.Camera;
import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.BounceInterpolator;
import android.view.animation.Transformation;

/**
 * 这个自定义的是View的Animation
 * Created by dp on 2018/1/25.
 */

public class customAnima extends Animation {
    private int mCenterWidth;
    private int mCenterHeight;

    private Camera mCamera = new Camera();
    private float mRotateY = 0.0f;

    /**
     * 实现一些初始化工作
     * @param width
     * @param height
     * @param parentWidth
     * @param parentHeight
     */
    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
        // 设置默认时长
        setDuration(3000);
        // 动画结束后保留状态
        setFillAfter(false);

        setInterpolator(new BounceInterpolator());
        mCenterWidth = width/2;
        mCenterHeight = height/2;
    }

    // 暴露接口-设置旋转角度
    public void setRotateY(float rotateY) {
        mRotateY = rotateY;
    }

    /**
     * 这里才是动画的实现逻辑
     * @param interpolatedTime
     * @param t
     */
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
//        super.applyTransformation(interpolatedTime, t);
        /** interpolatedTime为插值器的时间因子取值范围在0-1.0之间*/
        /** Transformation是一个矩阵的封装类，一般使用这个类获得一个矩阵*/
        /** 通过改变获得的matrix对象，将动画效果实现出来，<对于matrix的变换操作，基本可以实现任何动画效果></>*/
        final Matrix mMatrix = t.getMatrix();
        mCamera.save();
        // 使用Camera设置旋转的角度
        mCamera.rotateY(mRotateY * interpolatedTime);
        // 将旋转变换作用到matrix上
        mCamera.getMatrix(mMatrix);
        mCamera.restore();
        // 通过pre方法设置矩阵作用前的偏移量来改变旋转中心
        mMatrix.preTranslate(mCenterWidth , mCenterHeight);
        mMatrix.postTranslate(-mCenterWidth , -mCenterHeight);

    }
}
